package com.xxx.ecxception;

/**
 * @version v1.0
 * @Description
 * @Author admin
 * @date 2021/7/16  14:09
 * @Copyright
 */

/*
* tay{
*   需要被检测异常的代码
* }catch(异常类 变量名){
*
*
* }catch(异常类 变量名){
*
* }
* ......
* finally{
* 一定会被执行
* }
* */
    /*
    * 处理方式
    * 1.抛出
    * 2.try...catch
    *
    * */

    /*
    * java异常处理的优点
    * 1.把各种不同类型的异常情况分类，然后用java描述描述，可充分发挥类的可扩展性和重用性
    * 2.异常异常流程的代码和正常的代码分离，提高了程序的可读性，简化了程序结构
    * 3.对于异常，如果方法有能力处理就捕获处理，否则抛出由调用者处理
    *
    * */

    /*
    * 异常处理原则：
    * 1.异常处理只能用于非正常情况款，不能用来控制代码的正常流程
    *   >>滥用异常会降低程序的性能
    *   >>容易掩盖程序代码的错误，增加调试的复杂性
    * 2.为异常提供说明文档
    * 3.尽量避免异常
    * 4.避免过于庞大的tay代块
    * 5.在catch中尽量知道具体的异常类型
    * */

public class Exception02 {
    public static void main(String[] args) throws FxException{
        int[] arr = new int[3];
        try{
            method(arr,100);

        }catch (NullPointerException e){
            System.out.println("空指针异常已被处理");
        }catch (ArrayIndexOutOfBoundsException e){
            System.out.println("下标越界已被处理");
        }catch (FxException e){
            throw  new FxException("不能为负数");
        }catch (java.lang.Exception e){

        }
        System.out.println("abc");


    }

    public static void method(int[] arr, int index ) throws  FxException{
        if (arr == null) {
            throw new ArrayIndexOutOfBoundsException("不能为空");
        }
        if (index == arr.length) {
            throw new ArrayIndexOutOfBoundsException("不能越界");
        }
        System.out.println(arr[index]);
    }
}
